<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>点击</button>
    <script>
        // 1. 普通函数 this指向window(函数调用者)
        function fn() {
            console.log("普通函数" + this);
        }
        fn();
        // 2. 对象的方法 this指向的是对象o
        var o = {
            sayHi: function() {
                console.log("对象的方法" + this);
            }
        }
        o.sayHi();
        // 3. 构造函数 this指向ldh这个实例对象 原型对象里面的this指向的也是ldh这个实例对象
        function Star() {
            console.log("构造函数" + this);
        }
        Star.prototype = {
            constructor: Star,
            sing: function() {
                console.log(this);
            }
        }
        var ldh = new Star();
        ldh.sing();
        // 4. 绑定事件函数 this指向的是btn
        var btn = document.querySelector("button")
        btn.onclick = function() {
            console.log("绑定函数" + this);
        };
        // 5. 定时器函数 this指向window(函数调用者)
        setTimeout(function() {
            console.log(this);
        }, 1000); //延迟一秒执行
        var time = setInterval(function() {
            console.log(this);
            clearInterval(time);
        }, 1000); //每一秒执行一次
        // 6.立即执行函数 this指向window(函数调用者)
        (function() {
            console.log("立即执行函数" + this);
        })()
    </script>
</body>

</html>